﻿using SosData;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SosForms
{
    public partial class FormCambioPassword : FormBase
    {
        #region " Contructores "

        /// <summary>
        /// constructor
        /// </summary>
        public FormCambioPassword()
        {
            InitializeComponent();
        }

        Usuario _usuario;
        bool _sabeClaveActual;
        /// <summary>
        /// Contructor
        /// </summary>
        /// <param name="us">usuario</param>
        /// <param name="sabeClaveActual">Indicar si se sabe la clave actual</param>
        public FormCambioPassword(Usuario us, bool sabeClaveActual)
        {
            InitializeComponent();
            _usuario = us;
            _sabeClaveActual = sabeClaveActual;

            this.txtContraseñaActual.Visible = sabeClaveActual;
            this.lblcontraseñaActual.Visible = sabeClaveActual;

        }
        #endregion

        #region " Variables "
        sosContext context = new sosContext();
        #endregion

        #region " Metodos "

        /// <summary>
        /// Aceptar cambio clave
        /// </summary>
        private void Aceptar()
        {
            if (_sabeClaveActual)
            {
                if (SosBL.SosSecurity.CalculateMD5Hash(this.txtContraseñaActual.Text) == _usuario.Password)
                {
                    this.Cambiar();
                }
                else
                {
                    MessageBox.Show("La contraseña actual no es correcta", "Contraseña actual", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                this.Cambiar();
            }
        }

        /// <summary>
        /// Confirmar cambio de clave
        /// </summary>
        private void Cambiar()
        {
            using (var db = new sosContext())
            {

                if (this.txtContraseñaConfirmar.Text == this.txtContraseñaNueva.Text)
                {
                    _usuario = (from u in db.Users.Where(u => u.NickName == _usuario.NickName) select u).FirstOrDefault();
                    _usuario.Password = SosBL.SosSecurity.CalculateMD5Hash(this.txtContraseñaNueva.Text);
                    db.SaveChanges();
                    MessageBox.Show("La contraseña se ha cambiado correctamente", "Cambio contraseña", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                else
                {
                    MessageBox.Show("La contraseñas no coinciden", "Cambiar contraseña", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            this.Close();

        }

        /// <summary>
        /// Cancelar cambios
        /// </summary>
        private void Cancelar()
        {
            this.Close();
        }

        #endregion

        #region " controles "

        /// <summary>
        /// Aceptar cambios
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void butAceptar_Click(object sender, EventArgs e)
        {
            this.Aceptar();
        }

        /// <summary>
        /// Cancelar cambios
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void butCancelar_Click(object sender, EventArgs e)
        {
            this.Cancelar();
        }

        #endregion
    }
}
